% -*- program: xelatex -*-
\documentclass[12pt]{beamer} 
%\usepackage{beamerthemesplit}

\usepackage{fontspec}
\setsansfont{PT Sans}
\setmonofont{PT Mono}

\usepackage{beamerthemesplit}
\usefonttheme[onlymath]{serif}

\usetheme{CambridgeUS}
\usecolortheme{lily}

\hypersetup{unicode=true}
\DeclareFontEncoding{T1} 
\fontencoding{T1}
\usepackage[russian]{babel}

\usepackage{amsmath,amssymb,amsthm}
\usepackage{graphics,graphicx}
\usepackage{listings}
\usepackage{media9}
\usepackage{fancyvrb}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{verbatim,fancyvrb}
\usepackage{color,xcolor}
\usepackage{colortbl}
\usepackage{qrcode}

\newtheorem{ru_def}{Теорема}
\renewenvironment{theorem}{\begin{ru_def}}{\end{ru_def}}

\definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue
\definecolor{mylilas}{RGB}{170,55,241}
\definecolor{codecolor}{RGB}{0,120,0}
\definecolor{light-gray}{gray}{0.95}
\definecolor{light-green}{RGB}{205,255,204}
\definecolor{light-red}{rgb}{0.9, 0.8, 0.8}
\definecolor{light-yellow}{rgb}{1,1,0.85}
\definecolor{light-blue}{RGB}{255,204,153}
\definecolor{dark-blue}{rgb}{0,0,0.6}
\definecolor{dark-red}{RGB}{204,0,0}
\definecolor{dark-green}{RGB}{28,172,0}

\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\textcolor{green}{\ding{51}}}
\newcommand{\xmark}{\textcolor{red}{\ding{55}}}

\setbeamercolor{frametitle}{fg=dark-red,bg=gray!10}
\setbeamerfont{title}{series=\bfseries,parent=structure}
\setbeamerfont{frametitle}{series=\bfseries,parent=structure}
\setbeamertemplate{blocks}[rounded][shadow=false]
\setbeamercolor{block title}{fg=structure,bg=white}
\setbeamertemplate{navigation symbols}{}
 
\renewcommand{\emph}[1]{\textcolor{dark-blue}{#1}}
\newcommand{\emphb}[1]{\textcolor{dark-blue}{\textbf{#1}}}

\usepackage{tikz}
\usetikzlibrary{calc,patterns,decorations.pathmorphing,decorations.markings,positioning}
\usetikzlibrary{arrows,matrix,positioning,decorations,snakes}
\colorlet{myRed}{red!20}
\tikzset{
  rows/.style 2 args={/utils/temp/.style={row ##1/.append style={nodes={#2}}},
    /utils/temp/.list={#1}},
  columns/.style 2 args={/utils/temp/.style={column ##1/.append style={nodes={#2}}},
    /utils/temp/.list={#1}}}
\makeatletter
\tikzset{anchor/.append code=\let\tikz@auto@anchor\relax,
  add font/.code=%
    \expandafter\def\expandafter\tikz@textfont\expandafter{\tikz@textfont#1},
  left delimiter/.style 2 args={append after command={\tikz@delimiter{south east}
    {south west}{every delimiter,every left delimiter,#2}{south}{north}{#1}{.}{\pgf@y}}}}
\makeatother

%\warn{\matcode}[1]{ \textcolor{codecolor}{\texttt{#1}}}
%\newcommand{\matcode}[1]{\begin{Verbatim}[formatcom=\color{red}]#1\end{Verbatim}}
\definecolor{codecolor}{RGB}{0,150,0}
\newcommand{\matcode}[1]{ \textcolor{codecolor}{\texttt{#1}}}

\newcommand{\imgsrc}[1]{ 
\begin{tikzpicture}[remember picture,overlay]
  \node[anchor=north, rotate=90, inner sep=0.5pt] at (current page.west) {\fontsize{5}{6}\selectfont \textcolor{light-gray}{#1}};
\end{tikzpicture}  
}


\title{Реляционная модель данных}
\subtitle{Базы данных}
\author{Юдинцев В. В.}
\institute[Самарский университет]{Кафедра математических методов в экономике}

%\pgfdeclareimage[height=1cm]{logo}{ssau.pdf}
%\logo{\pgfuseimage{logo}}
%\setbeameroption{show notes}
%\graphicspath{{img/}}

\lstset{language=matlab, 
    keepspaces=true,
    extendedchars=true,
    basicstyle={\footnotesize  \color{black}},
    breaklines=true,
    morekeywords={matlab2tikz},
    keywordstyle=\color{blue},
    morekeywords=[2]{1}, keywordstyle=[2]{\color{codecolor}},
    identifierstyle={ \bf \color{black} },
    stringstyle=\color{mylilas},
    commentstyle=\color{mygreen},%
    showstringspaces=false,
    numbers=left,%
    numberstyle={\tiny \color{black}},
    numbersep=7pt, 
    emph=[1]{case,switch,otherwise},emphstyle=[1]\color{blue}, 
    frame=single,    
    %lineskip=-1.0pt,
    %emph=[2]{word1,word2}, emphstyle=[2]{style},    
}

\makeatother
\setbeamertemplate{footline}
{
  \leavevmode%
  \hbox{%  
  \begin{beamercolorbox}[wd=.3\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
    \usebeamerfont{author in head/foot}\insertshortauthor
  \end{beamercolorbox}%  
  \begin{beamercolorbox}[wd=.6\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
    \usebeamerfont{title in head/foot}\insertshorttitle
  \end{beamercolorbox}%
  \begin{beamercolorbox}[wd=.1\paperwidth,ht=2.25ex,dp=1ex,center]{date in head/foot}%
    \insertframenumber{} / \inserttotalframenumber\hspace*{1ex}
  \end{beamercolorbox}}%
  \vskip0pt%
}

\setbeamertemplate{headline}{}
%\setbeamertemplate{footline}{}

\AtBeginSection[]{
  \begin{frame}[plain]
  %\vfill  
  \begin{tikzpicture}
  \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);  
  \fill[color=dark-red]   (-1cm, 3.9cm) rectangle(\the\paperwidth, 5.9cm);
  %\usebeamerfont{title}\insertsectionhead\par%
  %\node[text width=\the\paperwidth,align=center] at (current page.center) {\color{ExecusharesWhite}\Large\textbf{\insertsectionhead}};  
  \node[text width=\the\paperwidth,align=center] at (6cm,4.9cm) {\color{white}\Large\textbf{\insertsectionhead}};  
  \end{tikzpicture}
  \end{frame}
}

% 
% Документ
%
%
\begin{document}

{
\setbeamercolor{background canvas}{bg=white} 
\usebackgroundtemplate{\includegraphics[width=\paperwidth,height=\paperheight]{back.png}}
\begin{frame}[plain]
\maketitle 
\end{frame}
}

\section[Содержание]{}

\frame{
\frametitle{Содержание}
\tableofcontents
}

\begin{frame}
  \frametitle{Модели данных}
  \begin{itemize}
    \item Для адекватного \emph{отображения} в БД \emph{состояния объектов и их взаимосвязей} в рассматриваемой предметной области необходима модель данных -- модель объектов и их взаимосвязей.  
    \item Все модели данных делятся на три вида, используемые на трёх этапах проектирования:
    \begin{itemize}
      \item Инфологическая
      \item Даталогическая
      \item Физическая
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Инфологическая модель}
\begin{itemize}
  \item На первом этапе (после постановки задачи) исследуется предметная область, \emphb{выявляются объекты и процессы, которые нужно будет отобразить} в информационной системе при решении задач, для которых разрабатывается информационная система.
  \item На первом этапе строится \emphb{семантическая модель} предметной области. Такая модель создаётся без ориентации на какую-либо конкретную СУБД и модель данных.   
  \item Наиболее распространённой инфологической моделью является \emphb{модель сущность-связь}.
\end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Даталогическое проектирование}
\begin{itemize}
  \item \emphb{Даталогическое проектирование} -- создание схемы базы данных на основе конкретной модели данных, например, на основе реляционной модели данных.
\end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Физическое проектирование}
\begin{itemize}
  \item \emphb{Физическое проектирование} -- создание схемы базы данных для конкретной системы управления баз данных.
  \item Специфика конкретной СУБД может включать в себя ограничения на именование объектов базы данных, ограничения на поддерживаемые типы данных. 
\end{itemize}
\end{frame}

\begin{frame}[c]
  \frametitle{Модели данных}
  \centering{\includegraphics[width=0.7\linewidth]{Модели_данных.png}}
\end{frame}

\begin{frame}[c]
\frametitle{Даталогические модели}
\emph{Логическую структуру} хранимых в базе \emph{данных} называют \emphb{моделью представления данных}. К основным моделям представления данных (моделям данных) относятся следующие:
\begin{itemize}
  \item \emph{иерархическая} 
  \item \emph{сетевая}
  \item \emph{реляционная} 
  \item постреляционная 
  \item многомерная 
  \item объектно-ориентированная
\end{itemize}
\end{frame}

\section{Реляционная модель данных}

\begin{frame}
  \frametitle{Автор реляционной модели} 
  \begin{columns}
    \column{0.4\linewidth}
      \includegraphics[width=1\linewidth]{Edgar_F_Codd.jpg}
    \column{0.6\linewidth}    
    \begin{itemize}
      \item Реляционная модель данных разработана математиком Эдгар Фрэнк Кодд (Edgar Frank Codd, 1923–2003), сотрудником IBM
      \item Codd E. F. A Relational Model of Data for Large Shared Data Banks. CACM 13: 6. Статья вышла в июне 1970 года
    \end{itemize}
  \end{columns}  
\end{frame}

\begin{frame}[c]
\frametitle{Реляционная модель}
\begin{itemize}
  \item Реляционная модель -- совокупность данных, состоящая из набора двумерных таблиц 
  \item В теории множеств таблице соответствует термин отношение (\emph{relation})
  \item Реляционная модель данных некоторой предметной области представляет собой набор отношении (\emph{relations}), изменяющихся во времени
\end{itemize}
\end{frame}

\begin{frame}[c]
\frametitle{Элементы реляционной модели}
\begin{tabular}{l|l}
\emphb{Элемент модели} & \emphb{Форма представления} \\
\hline \\
Отношение & Таблица \\
Схема отношения & Заголовок таблицы \\
Сущность & Описание свойств объекта \\ 
Кортеж & Строка таблицы \\
Атрибут & Заголовок столбца таблицы \\
Тип данных & Тип значений элементов таблицы\\
Домен & Множество допустимых значений атрибута \\
Значение атрибута & Значение поля в записи\\
Первичный ключ & Один или несколько атрибутов\\
\end{tabular}
\end{frame}

\begin{frame}[c]
\frametitle{Пример отношения ``Сотрудник''}
\begin{figure}[htbp]
\centering
\includegraphics[width=1\textwidth]{Таблица.png}
\end{figure}
\end{frame}

\begin{frame}
  \frametitle{Определения}
  \begin{itemize}
    \item \emphb{Степень} отношения определяется количеством атрибутов, которое оно содержит.
    \item \emphb{Кардинальность} -- это количество кортежей, которое содержит отношение.
    \item \emphb{Реляционная база данных} -- это набор нормализованных отношений.
  \end{itemize}
\end{frame}

\begin{frame}[c]
\frametitle{Домен}
\emph{Домен} представляет собой множество всех возможных значений определенного атрибута отношения. 

\emph{Сотрудник} включает 4 домена:
\begin{enumerate}
  \item фамилии всех сотрудников
  \item номера всех отделов
  \item названия всех должностей
  \item даты рождения всех сотрудников
\end{enumerate}
\end{frame}

\begin{frame}[c]
\frametitle{Первичный ключ (PK, Primary Key)}
Ключ отношения, ключевой атрибут:
\begin{itemize}
  \item атрибут отношения, однозначно идентифицирующий каждый из его кортежей
  \item ключ может быть составным (сложным) -- состоять из нескольких атрибутов
\end{itemize} 
\end{frame}

\begin{frame}[c]
  \frametitle{Первичный ключ (PK, Primary Key)}
  Ключ отношения, ключевой атрибут:
  \begin{itemize}
    \item каждое отношение обязательно имеет комбинацию атрибутов, которая может служить ключом. 
    \item существование ключа гарантируется тем, что отношение — это множество, которое не содержит одинаковых элементов
    \item в отношении может быть несколько ключей -- \emph{возможные ключи}.
  \end{itemize} 
  \end{frame}

\begin{frame}[c]
\frametitle{Внешний ключ}
\begin{itemize}
  \item отношение $R_1$ может содержать не ключевой атрибут, значение которого является ключом другого отношения $R_2$
  \item атрибут в отношении $R_1$ -- это \emphb{внешний ключ}
\end{itemize}  
\vfill
\begin{columns}
\column{0.5\linewidth}
\begin{tabular}{ll}
\emph{ФИО} & \emph{Отдел} \\
\hline
Иванов И. И. & 1 \\
Горбунков С. С. & 2 \\
Петров В. Е. & 2 \\
... & \\
\end{tabular}
\column{0.5\linewidth}
\begin{tabular}{ll}
\emph{Отдел} & \emph{Наименование} \\
\hline
1 & Отдел маркетинга \\
2 & IT-отдел \\
3 & Бухгалтерия \\
4 & Отдел планирования 
\end{tabular}
\end{columns}
\vspace{2mm}
Атрибут \emphb{Отдел} является внешним ключом в таблице \emph{Сотрудники}, и первичным ключом таблицы  \emph{Отделы}.
\end{frame}

\begin{frame}[c]
\frametitle{Для чего нужны ключи}
\begin{itemize}
\item \alert{исключения дублирования значений в ключевых атрибутах}
\item \alert{организации связывания таблиц}
\item упорядочения кортежей
\item ускорения работы к кортежами отношения 
\end{itemize}    
\end{frame}

\begin{frame}[c]
\frametitle{Таблица и Отношение}
Условия того, что таблица является \emph{отношением}
\begin{enumerate}
  \item все строки таблицы должны быть уникальны, то есть не может быть строк с одинаковыми первичными ключами
  \item имена столбцов таблицы должны быть различны, а значения их простыми, то есть недопустима группа значений в одном столбце одной строки
  \item все строки одной таблицы должны иметь одну структуру, соответствующую именам и типам столбцов
  \item Порядок размещения строк в таблице может быть произвольным
\end{enumerate}
\end{frame}

\section{Реляционная алгебра}
 
\begin{frame}
  \frametitle{Реляционная алгебра}
  \begin{itemize}
    \item Отношения являются множествами, поэтому средства манипулирования отношениями базируются на операциях теориии множеств с дополнительными   специальными операциями, специфичными для баз данных
    \item Операции реляционной алгебры позволяют на основе одного или нескольких отношений создавать другое отношение без изменения самих исходных отношений.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Операции реляционной алгебры}  
  \begin{itemize}
    \item выборка
    \item проекция
    \item \emph{декартово произведение}
    \item \emph{объединение}
    \item \emph{вычитание}
    \item \emph{пересечение}
    \item деление
    \item соединение
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Выборка}
  Из таблицы (R) выбирается строки (и формируется новая таблица -- отношение R), удовлетворяющие некоторому условию (C).
  $$
    R' = F_C (R)
  $$  
  \begin{center}    
    \includegraphics[width=0.55\linewidth]{Реляционная алгебра-Выборка.png}
    \end{center}
\end{frame}

\begin{frame}
  \frametitle{Проекция}
  В таблице (R) выбирается только заданные столбцы, при этом из результата исключаются повторяющиеся строки.
  \begin{center}    
  \includegraphics[width=0.6\linewidth]{Реляционная алгебра-Проекция.png}
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Произведение}
  Сцепление строк из одного отношения со строками из другого отношения (каждая строка первой таблицы сцепляется с каждой строкой второй таблицы). 
\end{frame}

\begin{frame}
  \frametitle{Произведение}
  \begin{center}
  \includegraphics[width=0.8\linewidth]{Реляционная алгебра-Произведение.png}
  \end{center}
\end{frame}

\def\firstcircle{(0,0) circle (1.2cm)}
\def\secondcircle{(45:2cm) circle (1.2cm)}
\def\thirdcircle{(0:2cm) circle (1.2cm)}

\begin{frame}
\frametitle{Объединение}
\begin{columns}
  \column{0.6\linewidth}
\begin{itemize}
\item Итоговая таблица содержит ствроки из первой и второй таблицы 
$$
  R = R_1 \cup R_2
$$
\item Операция объединения может быть выполнена только тогда, когда два отношения обладают одинаковым числом и названиями атрибутов (столбцов), т.е. \emph{совместимы по объединению}.
\end{itemize}
\column{0.4\linewidth}
\begin{tikzpicture}    
  \fill[light-red] \firstcircle;
  \fill[light-red] \secondcircle;
  \draw \firstcircle node[below] {$R_1$};
  \draw \secondcircle node[below] {$R_2$};
\end{tikzpicture}
\end{columns}
\end{frame}

\begin{frame}
  \frametitle{Разность}
  \begin{columns}
    \column{0.6\linewidth}
    \begin{itemize}
  \item Отношение с тем же заголовком, что и у совместимых по типу отношений $R_1$ и $R_2$, и телом, состоящим из кортежей, принадлежащих отношению $R_1$ и не принадлежащих отношению $R_2$ 
  $$
    R = R_1 \setminus R_2
  $$
  \item Операция разности может быть выполнена только тогда, когда два отношения обладают одинаковым числом и названиями атрибутов (столбцов), т.е. \emph{совместимы по объединению}.
  \end{itemize}
  \column{0.4\linewidth}
  \begin{tikzpicture}    
    \begin{scope}[even odd rule]
      \clip \secondcircle (-1.5,-3) rectangle (3,3);
      \fill[light-red] \firstcircle;
    \end{scope} 
    \draw \firstcircle node {$R_1$};
    \draw \secondcircle node {$R_2$};
    \end{tikzpicture}
  \end{columns}
\end{frame}

\begin{frame}
  \frametitle{Пересечение}
  \begin{columns}
    \column{0.6\linewidth}
  \begin{itemize}
  \item Отношение с тем же заголовком, что и у отношений $R_1$ и $R_1$, и телом, состоящим из кортежей, принадлежащих одновременно обоим отношениям $R_1$ и $R_1$ 
  $$
    R = R_1 \cap R_2
  $$
  \item Операция объединения может быть выполнена только тогда, когда два отношения обладают одинаковым числом и названиями атрибутов (столбцов), т.е. \emph{совместимы по объединению}.
  \end{itemize}
  \column{0.4\linewidth}
  \begin{tikzpicture}
    \draw \firstcircle node[below] {$A$};
    \draw \secondcircle node [above] {$B$};    
    \clip \firstcircle;
    \fill[light-red] \secondcircle;
\end{tikzpicture}
\end{columns}
\end{frame}

\begin{frame}
  \frametitle{Деление}
  \begin{itemize}
    \item \emphb{Делимое}: таблица (отношение) А содержит атрибуты $A_1, A_2, A_3, \ldots A_n$
    \item \emphb{Делитель}: таблица (отношение) B содержит атрибуты из подмножества $A_1, A_2, A_3, \ldots A_k$, $k<n$ \\
    $$
     C = A/B  
    $$  
    \item C содержит только атрибуты (столбцы), входящие в А, но не входящие в В
    \item C содержит только те кортежи (строки), декартово произведения которых с $B$ содержится в $A$ 
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Деление}
  \includegraphics[width=1\linewidth]{Реляционная алгебра-Деление.png}
\end{frame}

\begin{frame}
  \frametitle{Соединение}
  Существует несколько способов соединения отношений (таблиц) 
  \begin{itemize}
    \item естественное
    \item внешнее
    \item тета-соединение
    \item ...
  \end{itemize} 
  Все способы основаны на декартовом произведении, с применению к результату дополнительных ограничений. 
\end{frame}

\begin{frame}
\frametitle{Естественное соединения}
\begin{center}
  \includegraphics[width=1\linewidth]{Естественное_соединение.png}
\end{center}
\imgsrc{Изображение: Осипов Д. Л. Технологии проектирования баз данных. -- М.: ДМК Пресс, 2019.}
\end{frame}

\begin{frame}
  \frametitle{Правое внешнее соединение}
  \begin{center}
    \includegraphics[width=1\linewidth]{Правое_внешнее.png}
  \end{center}
  \imgsrc{Изображение: Осипов Д. Л. Технологии проектирования баз данных. -- М.: ДМК Пресс, 2019.}
  \end{frame}

 \begin{frame}
  \frametitle{Тета соединение}
  \begin{itemize}
    \item Тета-соединение определяет отношение, содержащее строки из декартового произведения отношений R и S, удовлетворяющие предикату
    \item Предикат может использовать не только оператор равенства (естественное соединение), но и любой другой оператор сравнения
  \end{itemize}
 \end{frame} 


\frame[plain]{
\frametitle{Список использованных источников}
\small
\begin{itemize}
  \item Осипов Д. Л. Технологии проектирования баз данных. -- М.: ДМК Пресс, 2019.   
\end{itemize}
}

\frame[plain,c]{
  \begin{center}
  \qrcode[height=1in]{https://classmech.ru/pages/databases/main}\\
  \vspace{2mm}
  {\tiny \url{https://classmech.ru/pages/databases/main} }
  \end{center}
}

\end{document}